package pe.gob.mimp.web.controller;

import java.io.IOException;
import java.sql.Blob;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import pe.gob.mimp.model.*;
import pe.gob.mimp.service.CasoSocialService;
import pe.gob.mimp.service.CombosService;
import pe.gob.mimp.service.MenuUsuarioService;
import pe.gob.mimp.service.SeguimientoBusquedaService;
import pe.gob.mimp.service.SeguimientoService;
import pe.gob.mimp.validator.SeguimientoValidator;

@Controller
@RequestMapping(value = "/casosocialaccion")
public class CasoSocialAccionController {
	@Autowired
	private CombosService combos;
	@Autowired
	private CasoSocialService casoSocialService;
	@Autowired
	private SeguimientoService seguimientoService;
	@Autowired
	private SeguimientoBusquedaService seguimientoBusquedaService;
	@Autowired
	private MenuUsuarioService menuUsuarioService;

	@RequestMapping(method = RequestMethod.GET)
	public String showCasoForm(
			Model model,
			@RequestParam(value = "idCasosocial", required = true) Long idCasosocial,
			@RequestParam(value = "idSeguimiento", required = false) Long idSeguimiento,
			HttpServletRequest request) {
		Seguimiento seguimiento;
		HttpSession session = request.getSession();
		List<MenuUsuario> menu;

		if (session.getAttribute("login") == null) {
			return "redirect:login";
		}
		menu = menuUsuarioService.getMenuUsuarioPorUserName((String) session
				.getAttribute("login"));
                seguimiento = new Seguimiento();
                SimpleDateFormat formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");
                seguimiento.setFechaRegistroSegui(formatoDeFecha.format(new Date()));
		if (idSeguimiento != null) {
			seguimiento = seguimientoService.getSeguimientoPorId(idSeguimiento);
                        
			if (seguimiento.getFechaRegistro() != null)
				seguimiento.setFechaRegistroSegui(formatoDeFecha.format(seguimiento.getFechaRegistro()));
                        if (seguimiento.getFechaSeguimiento() != null)
				seguimiento.setFechaSeguimientoString(formatoDeFecha.format(seguimiento.getFechaSeguimiento()));
                        
		} else {			
			seguimiento.setIdCasosocial(idCasosocial);
		}
		model.addAttribute("seguimiento", seguimiento);
		if (idSeguimiento != null) {
			model.addAttribute("edita", true);
		} else {
			model.addAttribute("edita", false);
		}
		model.addAttribute("menu", menu);
		model.addAttribute("opciones", menu);
		model.addAttribute("casosocialResumen",
				casoSocialService.getCasoSocialResumen(idCasosocial));
		return "casosocialaccion";
	}

	@RequestMapping(method = RequestMethod.POST)
	public String grabaFormulario(Model model, Seguimiento seguimiento,
			@RequestParam("file") MultipartFile file) {
		Seguimiento seguimientoTemp;		
		if (file.getSize() != 0) {
			try {				
				seguimiento.setArchivo(file.getOriginalFilename());
				seguimiento.setDocumento(file.getBytes());
				seguimiento.setContentType(file.getContentType());
                    
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else{
                    if(seguimiento.getIdSeguimiento()!=null){
                        seguimientoTemp = seguimientoService.getSeguimientoPorId(seguimiento.getIdSeguimiento());
                        if(seguimientoTemp.getContentType()!=null){
                            seguimiento.setContentType(seguimientoTemp.getContentType());
                            seguimiento.setDocumento(seguimientoTemp.getDocumento());
                        }
                    }                        
		}
                if (seguimiento.getFechaRegistroSegui() != null) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			try {
				seguimiento.setFechaRegistro(dateFormat.parse(seguimiento.getFechaRegistroSegui()));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
                if (seguimiento.getFechaSeguimientoString() != null) {
                    if(!seguimiento.getFechaSeguimientoString().equals("")){
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			try {
				seguimiento.setFechaSeguimiento(dateFormat.parse(seguimiento.getFechaSeguimientoString()));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
                    }
		}
		seguimientoService.saveSeguimiento(seguimiento);
		return "redirect:casosocialaccion?idCasosocial="
				+ seguimiento.getIdCasosocial();
	}

	@RequestMapping(value = "/seguimiento", method = RequestMethod.GET)
	public @ResponseBody
	List<SeguimientoBusqueda> getSeguimiento(
			@RequestParam(value = "idCasosocial", required = true) Long idCasosocial,
			HttpServletRequest request) {
		List<SeguimientoBusqueda> lista = null;
		HttpSession session = request.getSession();

		if (session.getAttribute("login") == null) {
			return lista;
		}
		return seguimientoBusquedaService.getSeguimientoPorCaso(idCasosocial);
	}

	@RequestMapping(value = "/elimina", method = RequestMethod.GET)
	public String eliminaSeguimiento(
			@RequestParam(value = "idSeguimiento", required = true) Long idSeguimiento,
			@RequestParam(value = "idCasosocial", required = true) Long idCasosocial) {

		seguimientoService.deleteSeguimiento(seguimientoService
				.getSeguimientoPorId(idSeguimiento));

		return "redirect:/casosocialaccion?idCasosocial=" + idCasosocial;
	}
}
